import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Pat here.
 * 
 * @author Montes Alonso Irli Natali
 * @version Programacion Orientada a Objetos
 */
public class Patricio extends ObjetoSube
{
    private Globito globo1;
    private Globito globo2;
    
    /**
     * Constructor de la clase Patricio
     */
    public Patricio()
    {
        subir(1);
        globo1=null;
        globo2=null;
    }

    /**
     * Metodo de actua, mientras patricio encuentre al menos 1 globo se movera hacia arriba
     * de lo contrario caera.
     */
    public void act() 
    {
        if(!noSeEncuetraGlobo())
            mueve(subir());
        caePatricio();
    }  

    /**
     * Metodo que logra hacer que el patricio se mueva hacia arriba
     * @param sub, recibe el numero de posiciones que subira patricio
     * @return 0, es un metodo abstracto, en globo se necesitaba que regresara un entero por eso aqui regresamos un 0 
     * para que no afecte en nada
     */
    public int mueve(int sub)
    {
        int sube=sub;//variable de posiciones que se movera patricio

        if(super.getY()>0)//mientras la posicion en Y de patricio sea mayor de 0 entra en el if
        {
            sube=(getY()-sube);// la variable sube se iguala al valor de la posicion en y - los pasos
            this.setLocation(getX(),sube);//se pone el patricio en la posicion en x y y
        }
        return 0;
    }

    /**
     * Metodo para hacer caer a patricio siempre y cuando ya no se encuentre un globo, y que su posicion en y
     * sea mayor a 0 si se cumple se cambia imagen por una de sorpresa
     * @return cantidad, regresa la posicion en Y de patricio
     */
    public int caePatricio()
    {
        int posicionY;
        int baja=1,cantidad=0;

        if(noSeEncuetraGlobo())
        {     if(getY()>=0)
            {
                cantidad=(getY()+baja);
                this.setImage("sorprendido.png");
                setLocation(getX(),cantidad);
                if(getY()==399)
                {
                    World mundo = super.getWorld();
                    ((Fondo)mundo).reiniciaNivel();
                }
            }
        }

        return cantidad;
    }

    /**
     * Metodo para ver si patricio no se encontro con un globo
     * @return true, regresa un true si no se encontro un globo y false el caso contrario
     */
    public boolean noSeEncuetraGlobo()
    {
        if(globo1 == null&& globo2==null)
            return true;
        else
            return false;   
    }

    /**
     * Iguala la variable subir a 0 eso hara que patricio ya no siga subiendo
     */
    public void detenPatricio()
    {
        subir(0);
    }

    /**
     * Metodo para iguala la variable subir a 1, eso hara que patricio suba
     */
    public void sigueSubiendoPat()
    {
        subir(1);
    }
    
    /**
     * Metodo para asignar a las variables de instancia los 2 globos que usara patricio
     * @para, unGlobo, referencia a un globo
     * @param dosGlobo, referencia a un globo
     */
    public void recibeGlobo(Globito unGlobo, Globito dosGlobo)
    {
        globo1=unGlobo;
        globo2=dosGlobo;
    }
    
     /**
     * Metodo para eliminar los globos
     * @param globo, referencia al globo el cual se eliminara
     */
    public void eliminaleGlobo(Globito globo)
    {
        if(globo==globo1)
        {
            globo1=null;
        }
        else
        {
            if(globo==globo2)
            {
                globo2=null;
            }
        }
    }
}
